home *** CD-ROM | disk | FTP | other *** search
/ MASPC 1 / MASPC_1.iso / Demos / Demo DIV / DATA / PRG / TUTOR / TUTOR4.PRG < prev    next >
Encoding:
Text File  |  1997-12-03  |  4.8 KB  |  151 lines

  1. //--------------------------------------------------------------------
  2. // Titulo: Tutorial 4
  3. // Autor:  Daniel Navarro Medrano
  4. // Fecha:  28/04/97
  5. //--------------------------------------------------------------------
  6.  
  7. PROGRAM Tutorial_4;
  8.  
  9. GLOBAL
  10.     longitud_gusano=8;  // Longitud de la cola del gusano
  11.     manzanas=0;         // Número de manzanas en pantalla
  12.     puntos=0,record=0;  // Variables para puntuación y record
  13.  
  14. BEGIN
  15.  
  16.     load_fpg("tutorial\tutor4.fpg");    // Carga el fichero de gráficos
  17.     put_screen(0,1);                    // Pone el fondo de pantalla
  18.  
  19.     // Pone los textos de la puntuación y de los records
  20.     write_int(0,64,8,0,&puntos);
  21.     write_int(0,256,8,0,&record);
  22.  
  23.     // Crea la cabeza del gusano que maneja todo el cuerpo
  24.     cabeza_gusano(8,96,8,0);
  25.  
  26.     LOOP                                // Entra en un bucle infinito
  27.         FRAME;                          // Muestra todo en pantalla
  28.         // Aleatoriamente se elige si se pone una manzana
  29.         // o no y siempre si hay menos de 3 manzanas
  30.         IF (rand(0,32)==0 and manzanas<3)
  31.             // Pone una manzana e incrementa el contador de las mismas
  32.             manzana(rand(1,38)*8,rand(3,23)*8);
  33.             manzanas++;
  34.         END
  35.     END
  36. END
  37.  
  38. //--------------------------------------------------------------------
  39. // Proceso cabeza_gusano
  40. // Maneja la cabeza del gusano
  41. // Entradas: x,y   = Coordenadas del gráfico
  42. //           xi,yi = Incrementos horizontal y vertical
  43. //--------------------------------------------------------------------
  44.  
  45. PROCESS cabeza_gusano(x,y,ix,iy)
  46.  
  47. PRIVATE
  48.     identificador_manzana;  // Identificador al proceso de la manzana
  49.  
  50. BEGIN
  51.     graph=2;                // Se pone el gráfico
  52.  
  53.     // Y se crea un cuerpo del gusano que crea a los otros
  54.     segmento_gusano(128,priority+1);
  55.  
  56.     REPEAT
  57.         FRAME;              // Visualiza todo
  58.  
  59.         // Comprueba las teclas de los cursores y cambia los incrementos
  60.         IF (key(_right))
  61.             ix=8; iy=0;
  62.         END
  63.         IF (key(_left))
  64.             ix=-8; iy=0;
  65.         END
  66.         IF (key(_down))
  67.             ix=0; iy=8;
  68.         END
  69.         IF (key(_up))
  70.             ix=0; iy=-8;
  71.         END
  72.  
  73.         // Comprueba si el gusano ha colisionado con la manzana
  74.         IF (identificador_manzana=collision(TYPE manzana))
  75.             // Elimina esa manzana
  76.             signal(identificador_manzana,s_kill);
  77.             manzanas--;         // Decrementa el contador de manzanas
  78.             longitud_gusano+=4; // Incrementa la cola del gusano
  79.             puntos+=10;         // Suma 10 puntos a la puntuación
  80.         END
  81.         // Mueve al gusano en la direccion deseada
  82.         x=x+ix;
  83.         y=y+iy;
  84.     // Repite has que choque con la pared de fondo (get_pixel) o
  85.     // colisione con su propio cuerpo
  86.     UNTIL (get_pixel(x,y)!=0 or collision(type segmento_gusano));
  87.  
  88.     // Apaga y enciende la pantalla para el proximo paso
  89.     fade_off();
  90.     fade_on();
  91.  
  92.     // Comprueba si se ha superado el record y lo actualiza
  93.     IF (puntos>record)
  94.         record=puntos;
  95.     END
  96.  
  97.     // Reinicia las variable de puntos y longitud de cola
  98.     puntos=0;
  99.     longitud_gusano=8;
  100.     // Elimina todos los procesos del tipo segmento_gusano
  101.     signal(son,s_kill_tree);
  102.     // Crea un nuevo gusano, creando su cabeza
  103.     cabeza_gusano(8,96,8,0);
  104. END
  105.  
  106. //--------------------------------------------------------------------
  107. // Proceso segmento_gusano
  108. // Maneja los segmentos del cuerpo del gusano
  109. // Entradas: n        = Número de cuerpo (total=128)
  110. //           priority = prioridad del proceso en cuanto a ejecución
  111. //--------------------------------------------------------------------
  112.  
  113. PROCESS segmento_gusano(n,priority)
  114.  
  115. BEGIN
  116.     // Si no es el ultimo cuerpo crea otro con mayor prioridad
  117.     // y menor número de cuerpo
  118.     IF (n>0) segmento_gusano(n-1,priority+1); END
  119.  
  120.     LOOP        // Entra en un bucle infinito
  121.  
  122.         // Comprueba la prioridad que indica el orden en la cola
  123.         // si esta dentro de la longitud de la cola
  124.         IF (priority<longitud_gusano)
  125.             // Si esta dentro de la longitud lo imprime
  126.             graph=2;
  127.         ELSE
  128.             // Si no, no pone gráfico
  129.             graph=0;
  130.         END
  131.         // Coge las variables de padre, el cuerpo de delante,
  132.         // sin actualizar, es decir,donde estaba antes
  133.         x=father.x;
  134.         y=father.y;
  135.         FRAME;
  136.     END
  137. END
  138.  
  139. //--------------------------------------------------------------------
  140. // Proceso manzana
  141. // Maneja los gráficos de las manzanas
  142. // Entradas: x,y = Coordenadas del gráfico
  143. //--------------------------------------------------------------------
  144.  
  145. PROCESS manzana(x,y)
  146.  
  147. BEGIN
  148.     graph=3;    // Se elige el gráfico y se entra en un bucle infinito
  149.     LOOP FRAME; END
  150. END
  151.